

// 封装 事件类
interface EventType {
  [propsName: string]: Function[];
}


export class MyEvent {
  eventObj: EventType = {};
  on(type: string, handler: Function) {
    // 1. 判断事件是否存在
    if (this.eventObj[type]) {
      // 2. 存在直接推入事件驱动函数
      this.eventObj[type].push(handler)
    } else {
      // 3. 不存在创建事件类型并推入事件驱动函数
      this.eventObj[type] = [handler]
    }
  }
  emit(type: string) {
    // 1. 判断事件是否存在
    if(this.eventObj[type]) {
      this.eventObj[type].forEach(handler => {
        handler()
      })
    } else {
      //2. 不存在给予警告
      console.warn(`警告⚠️：事件${type}不存在， 调用无效`)
    }
   
  }
  off(type: string) {
    // 调用 delete 操作符
    delete this.eventObj[type]
  }
}

const ev = new MyEvent();

ev.on('click', () => console.log('点击事件执行了1'))
ev.on('click', () => console.log('点击事件执行了2'))

ev.emit('click');

ev.off('click')

ev.emit('click');



console.log(ev)